// 所有的组件数据都经过这里格式化
export default class BookmarkTransformer {
    static transform(bookmarks: any) {
        // 格式化数据
        return bookmarks.map(
            (bookmark: any) => {
                // 将属性props数组转换成对象
                if (bookmark.props) {
                    bookmark.props = bookmark.props.reduce((acc: any, cur: any) => {
                        acc[cur.key] = cur.value;
                        return acc;
                    }, {});
                }
                // 所有组件公共属性处理都在这里, 这里处理的一定是所有组件都有的属性, 而不是针对某一个特定组件, 如site组件
                // 1. 基本属性
                if (!bookmark.width || bookmark.width === 0) {
                    bookmark.width = 1;
                }
                if (!bookmark.height || bookmark.height === 0) {
                    bookmark.height = 1;
                }
                // 2. type默认值
                // 所有组件都必须有type, 默认为1
                if (!bookmark.props.type) {
                    bookmark.props.type = "1";
                }
                // 针对site组件的处理
                // 4. 快捷访问数据处理
                if (bookmark.props.fastLinks) {
                    try {
                        const fastLinks = JSON.parse(bookmark.props.fastLinks)
                        bookmark.props.fastLinks = fastLinks.reduce((accumulator: any, cur: any) => {
                            accumulator.push({
                                key: cur.name,
                                value: cur.url
                            })
                            return accumulator
                        }, [])
                    } catch (e) {
                        console.log(`处理ID:${bookmark.id}的fastLinks异常`)
                    }
                }
                // 5. css样式
                if (bookmark.props.style) {
                    bookmark.props.style = JSON.parse(bookmark.props.style)
                }
                // 5. 可能是之前做folder的时候预留了这个children字段
                if (bookmark.children && bookmark.children.length > 0) {
                    const children = bookmark.children;
                    delete bookmark.children;
                    bookmark.props["children"] = children
                } else {
                    delete bookmark.children;
                }

                return bookmark;
            })
    }
}
